package com.wcj.test;

/**
 * 在一个二维数组array中（每个一维数组的长度相同），每一行都按照从左到右递增的顺序排序，
 * 每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
 * [
 * [1,2,8,9],
 * [2,4,9,12],
 * [4,7,10,13],
 * [6,8,11,15]
 * ]
 * 给定 target = 7，返回 true。
 *
 * 给定 target = 3，返回 false。
 *
 * 数据范围：矩阵的长宽满足5000≤n,m≤500 ， 矩阵中的值满足0≤val≤10
 * 9
 *
 * 进阶：空间复杂度 O(1) ，时间复杂度 O(n+m)
 */
public class 二维数组中的查找 {

    public static void main(String[] args) {
        boolean find = Find(7, new int[][]{{1,2,8,9}, {2,4,9,12}, {4,7,10,13},{6,8,11,15}});
        System.out.println(find);
    }

    public static boolean Find(int target, int [][] array) {
        if (array.length == 0){
            return false;
        }
        int n = array.length;
        if (array[0].length == 0){
            return false;
        }
        int m = array[0].length;
        for (int i = n - 1, j = 0; i >= 0 && j < m;){
            if (array[i][j] > target){
                i--;
            }else if (array[i][j] < target){
                j++;
            }else {
                return true;
            }
        }
        return false;
    }
}
